package com.wuseguang.springcloud.util.WeChat;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.wuseguang.springcloud.JdbcTemplate.BaseTemplate;
import com.wuseguang.springcloud.JdbcTemplate.WXJdbc;
import com.wuseguang.springcloud.util.HttpRequestUtil;
import com.wuseguang.springcloud.util.Official;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

public class WXUtil {

    private static Logger logger = LoggerFactory.getLogger(WXUtil.class);



    /**
     * 获取access_token 小程序
     * @param appId 公众号的appid
     * @param appSecret 公众号秘钥
     * @return
     */
    public  static  String getToken(String appId,String appSecret) {

        String url = "https://api.weixin.qq.com/cgi-bin/token";
        //获取token
        String token =  HttpRequestUtil.Get(url,"grant_type=client_credential&appid="+appId+"&secret="+appSecret);
        //access_token
        return  token ;
    }


    /**
     * @Author zm
     * @Description 获取用户信息
     * @Date 2020/10/9 9:42
     */
    public  static  String getUserInfo(String access_token,String openId) {

        String url = "https://api.weixin.qq.com/cgi-bin/user/info";

        String userInfo = HttpRequestUtil.Get(url, "access_token=" + access_token + "&openid=" + openId + "&lang=zh_CN");
        //access_token
        return  userInfo;
    }






    /**
     * 审核内容
     * @param accessToken toekn
     * @param content 审核的内容
     * @return
     */
    public static  Boolean checkContent(String accessToken,String content) {
        try {

            //检测文本的连接
            String url= "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + accessToken;

            Map<String, String> map = new HashMap<>();
            map.put("content",content);
            String body = JSONObject.toJSONString(map);

            String result =HttpRequestUtil.Post(url,body);// 转成string
            JSONObject json = JSONObject.parseObject(result);
            logger.info(json.toJSONString());
            return getResult(json);
        } catch (Exception e) {
            e.printStackTrace();
            return true;
        }
    }


    /**
     *  恶意图片过滤
     * @param multipartFile
     * @return
     */
    public static Boolean checkPic( String accessToken,MultipartFile multipartFile) {
        try {
            //检测地址
            String url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + accessToken;

            String result =  HttpRequestUtil.postPic(url,multipartFile);// 转成string
            JSONObject json = JSONObject.parseObject(result);
            logger.info(json.toJSONString());
            return getResult(json);
        } catch (Exception e) {
            e.printStackTrace();
            return true;
        }
    }

    /**
     * 解析结果是否违规
     * @param json 检测结果
     * @return
     */
    private  static Boolean  getResult(JSONObject json){
        Object errcode = json.get("errcode");
        int errCode = (int) errcode;
        if (errCode == 0) {
            return true;
        } else if (errCode == 87014) {
            return false;
        }
        return true;
    }


    /**
     * 获取用户的openid 小程序
     * @param appId 公众账号的唯一标识
     * @param appSecret 公众账号的密钥
     * @param code 登录时获取的 code
     * @return 返回的openId
     */
    public static  String getUserOpenId(String appId,String appSecret, String code) {

        //获取用户openId
        String url = "https://api.weixin.qq.com/sns/jscode2session";
        //获取请求结果
        String result =  HttpRequestUtil.Get(url,"grant_type=authorization_code&appid="+appId+"&secret="+appSecret+"&js_code="+code);
        //请求回来的所有信息
        JSONObject json = JSONObject.parseObject(result);
        logger.info(json.toString());
      try {
          return json.get("openid").toString();
      }catch (Exception e){
          return "error";
      }
    };


    /**
     * 给用户发送订阅信息 小程序
     * @param access_token token
     * @param touser 用户的openId
     * @param template_id 所需下发的订阅模板id
     * @param page 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。 非必填
     * @param data data 模板内容，格式形如 { "key1": { "value": any }, "key2": { "value": any } }
     * @param miniprogram_state 跳转小程序类型：developer为开发版；trial为体验版；formal为正式版；默认为正式版。非必填
     * @param lang 进入小程序查看”的语言类型，支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文)，默认为zh_CN 非必填
     * @return
     */
    public static  String sendWechatmsgToUser(String access_token, String touser, String template_id, String page, JSONObject data, String miniprogram_state,String lang){

        try {
            //发送地址
            String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+access_token;
            //要发送的数据
            JSONObject json = new JSONObject();
            json.put("touser",touser);
            json.put("template_id",template_id);
            json.put("page",page);
            json.put("data",data);
            json.put("miniprogram_state",miniprogram_state);
            json.put("lang",lang);

           String s =  HttpRequestUtil.Post(url,json.toString());
           System.err.println(s);
        }catch (Exception e){
            logger.error("e",e);
        }
        return "success";
    }


    /**
     * 获取网页授权凭证 (公众号)
     * @param appId 公众账号的唯一标识
     * @param appSecret 公众账号的密钥
     * @param code 用户code
     * @return
     */
    public static Official getOfficialAccount(String appId, String appSecret, String code){

        Official off = null;
        // 拼接请求地址
        String requestUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";

        // 获取网页授权凭证
        String json=HttpRequestUtil.Get(requestUrl,"appid="+appId+"&secret="+appSecret+"&code="+code+"&grant_type=authorization_code");

        JSONObject jsonObject = (JSONObject) JSONObject.parse(json);
        if (null != jsonObject) {
            try {
                off = new Official();
                off.setAccessToken(jsonObject.getString("access_token"));
                off.setExpiresIn(jsonObject.getInteger("expires_in"));
                off.setRefreshToken(jsonObject.getString("refresh_token"));
                off.setOpenId(jsonObject.getString("openid"));
                off.setScope(jsonObject.getString("scope"));
            } catch (Exception e) {
                off = null;
                int errorCode = jsonObject.getInteger("errcode");
                String errorMsg = jsonObject.getString("errmsg");
                logger.error("获取网页授权凭证失败 errcode:{} errmsg:{}", errorCode, errorMsg);
            }
        }
        return off;
    }

    /**
     * 公众号信息推送
     * @param touser 	接收者openid
     * @param template_id 模板ID
     * @param url 模板跳转链接 可不填写
     * @param miniprogram 跳小程序所需数据，不需跳小程序可不用传该数据
     * @param data 模板数据
     * @return
     */
    public static  String officialAccountPush(String access_token ,String touser,String template_id,
                                              String url,JSONObject miniprogram,JSONObject data){

        try {
            String httpUrl ="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token;
            //要发送的数据
            JSONObject json = new JSONObject();
            json.put("touser",touser);
            json.put("template_id",template_id);
            json.put("url",url);
            json.put("data",data);
            json.put("miniprogram",miniprogram);

            String s =  HttpRequestUtil.Post(httpUrl,json.toString());
            logger.info("推送返回信息：={}",s);
        }catch (Exception e){
            logger.info("e",e);
        }
        return "success";
    }


    public static void main(String[] args) {
        System.err.println(checkContent("34_RgIXxzHm7f-1uVj7CuG9GN2UuGb7R0iUFy9NKez0OQ1gwdoz_jsmEdd8GFdkKkwuRm4KCMIYPO3PwHWVUfdAXmv6l5hCP3vJvGcQIUkM0UTw9C93V0_dYXBHtp9ZW7VGABwbqSbPaTomzRkTPLNcAEADZB","习大大"));
    }
}
